# 枪类
class Gun:
    def __init__(self, model):  # 定义2个属性
        self.model = model
        self.bullet_count = 0

    def add_bullet(self, count):  # 装填子弹的方法
        self.bullet_count += count

    def shoot(self):
        if self.bullet_count <= 0:
            print("[%s]没有子弹了。。。" % self.model)

            return

        self.bullet_count -= 1  # 发射子弹
        print("[%s]突突突...[%d]" % (self.model, self.bullet_count))


class Soldier:
    def __init__(self, name):
        self.name = name
        self.gun = None

    def fire(self):
        # 判断士兵是否有枪
        if self.gun is None:
            print("[%s]还没有枪..." % self.name)
            return
        # 高喊口号
        print("冲阿...[%s]" % self.name)
        # 让枪装填子弹
        self.gun.add_bullet(50)  # 士兵调用 枪对象中的添加子弹方法  #对象嵌套
        # 让枪发射子弹
        self.gun.shoot()


ak47 = Gun("AK47")

# 创建许三多
xusanduo = Soldier("许三多")
xusanduo.gun = ak47  # 把枪类中的model、bullet_count属性和add_bullet、shoot方法传递进士兵类了
xusanduo.fire()
print(xusanduo.gun)  # 因为没有__str__方法，所以描述不出来...
